// Symbol 数据类型 表示一个独一无二的值，可以用来避免对象属性名重复的问题，还可以借助这种特性模拟对象的私有成员


// shared.js =================================

const cache = {}

// a.js ==========================================

cache['foo'] = Math.random()
console.log(Symbol() === Symbol()) //false

const obj = {}
obj[Symbol()] = '123'
obj[Symbol()] = '456'
console.log(obj) //{[Symbol()]:'123',[Symbol()]:'456}

const obj = {
    [Symbol()]:123
}
console.log(obj)//{[Symbol]:'123'} Symbol可以作为对象唯一的属性
//b.js ==========================================

const name = Symbol()
const person = {
    [name]:'zce',
    say(){
        console.log(this[name])
    }
}

person[Symbol()]// 无法访问 外部因为无法创建完全相同的Symbol，所以就无法直接访问到这个成员，这样该对象便实现了私有成员
person.say() //zce 内部可以拿到Symbol属性值的成员